1697
1697
Created at : 2023-10-22 17:50
1697
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n ,k, ArraySize;
vector<int> p;
cin >> n >> k;
if(n >= k)
{
cout << n - k;
return 0;
}
p.resize(k + 1);
for(int i = 0; i < n; ++i)
{
p[i] = n - i;
}
p[n] = 0;
for(int i = n + 1; i < k + 1; ++i)
{
if(i % 2 == 0)
{
p[i] = min(p[i - 1] + 1, p[i / 2] + 1);
}
else
{
p[i] = min(p[i - 1] + 1, p[(i+1) / 2] + 2);
}
}
cout << p[k];
return 0;
}
흔한 DP문제이지만 너무 복잡하게 생각했다.
DP는 순서대로 차근차근 하나씩 쌓아가야 한다는 것을 깨달았다.